/* 
 * Header file for RTobject(abstract object)
 * Programming by SochiX (http://sochix.ru)
 */

#ifndef _RT_OBJECT_HPP
#define _RT_OBJECT_HPP

#include "vector3D.hpp"
#include "ray.hpp"
#include "point3D.hpp"
#include "material.hpp"
#include "texture.hpp"
#include "../graph/color.hpp"

#include <iostream>

class RTobject
{
	private:
	
	
	public:
	Point3D position;
	Material objMat;
	std::string name;
	Texture *objTex;
	
	RTobject(Point3D nposition, Material nMat): position(nposition),objMat(nMat),name("Not set") {objTex=NULL;}
  	virtual bool Intersect(Ray&, double&)=0;
  	virtual Color Trace(Ray&, Point3D, double&)=0;
  	virtual Vector3D GetNormalVect()=0;
  	virtual Material GetMaterial() {return objMat;}; //irrational solve!!!!
	virtual void SetName(std::string nName) {name=nName;}
	virtual std::string GetName() {return name;}
	virtual ~RTobject() {}
};

#endif	/* _RT_OBJECT_HPP */
